//package com.gpframework.common.utils.contract;
//
//import cn.hutool.core.lang.Snowflake;
//import cn.hutool.core.util.IdUtil;
//import cn.hutool.core.util.URLUtil;
//import com.aspose.pdf.Document;
//import com.aspose.pdf.devices.JpegDevice;
//import com.aspose.pdf.devices.Resolution;
//import com.aspose.words.DocumentBuilder;
//import com.aspose.words.License;
//import com.aspose.words.PaperSize;
//import com.aspose.words.SaveFormat;
//import com.gpframework.common.config.GpframeworkConfig;
//import com.gpframework.common.constant.Constants;
//import com.gpframework.common.utils.DateUtils;
//import com.gpframework.common.utils.StringUtils;
//import com.gpframework.common.utils.uuid.IdUtils;
//import org.apache.pdfbox.pdmodel.PDDocument;
//import org.apache.pdfbox.pdmodel.PDPageTree;
//import org.apache.poi.xwpf.usermodel.*;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import javax.imageio.ImageIO;
//import java.awt.*;
//import java.awt.image.BufferedImage;
//import java.io.*;
//import java.net.URL;
//import java.util.ArrayList;
//import java.util.Iterator;
//import java.util.List;
//import java.util.Map;
//import java.util.stream.Collectors;
//
///**
// * @ClassName:WordUtil
// * @Description:操作word文档工具类
// * @Version:V1.0
// * @Author:wuyongqiang
// * @Date:2021/12/7 13:53:32
// */
//public class WordUtil {
//
//    private static final Logger log = LoggerFactory.getLogger(WordUtil.class);
//
//    /**
//     * @Author: wuyongqiang
//     * @Description:替换word中需要替换的特殊字符
//     * @Date: 2021/12/7  16:59
//     * @Param srcPath: 需要替换的文档全路径
//     * @Param exportFile: 替换后文档的保存路径
//     * @Param contentMap: {key:将要被替换的内容,value:替换后的内容}
//     * @Param replaceTableMap: {key:将要被替换的表格内容,value:替换后的表格内容}
//     * @return: boolean 返回成功状态
//     **/
//    public static boolean replaceAndGenerateWord(String srcPath, String exportFile, Map<String, String> contentMap, Map<String, String> replaceTableMap) throws IOException {
//        boolean bool = true;
//        FileInputStream inputStream = new FileInputStream(srcPath);
//        XWPFDocument document = new XWPFDocument(inputStream);
//        // 替换段落中的指定文字
//        Iterator<XWPFParagraph> itPara = document.getParagraphsIterator();
//        while (itPara.hasNext()) {
//            XWPFParagraph paragraph = itPara.next();
//            commonCode(paragraph, contentMap);
//        }
//        // 替换表格中的指定文字
//        Iterator<XWPFTable> itTable = document.getTablesIterator();
//        while (itTable.hasNext()) {
//            XWPFTable table = itTable.next();
//            int rcount = table.getNumberOfRows();
//            for (int i = 0; i < rcount; i++) {
//                XWPFTableRow row = table.getRow(i);
//                List<XWPFTableCell> cells = row.getTableCells();
//                for (XWPFTableCell cell : cells) {
//                    //单元格中有段落，得做段落处理
//                    List<XWPFParagraph> paragraphs = cell.getParagraphs();
//                    for (XWPFParagraph paragraph : paragraphs) {
//                        commonCode(paragraph, replaceTableMap);
//                    }
//                }
//            }
//        }
//
//        FileOutputStream outStream = new FileOutputStream(exportFile);
//        document.write(outStream);
//        outStream.close();
//        inputStream.close();
//
//
//        return bool;
//    }
//
//
//    /**
//     * @Author: wuyongqiang
//     * @Description:替换内容
//     * @Date: 2021/12/7  16:56
//     * @Param paragraph: 被替换的文本信息
//     * @Param contentMap: {key:将要被替换的内容,value:替换后的内容}
//     * @return: void
//     **/
//    private static void commonCode(XWPFParagraph paragraph, Map<String, String> contentMap) {
//        List<XWPFRun> runs = paragraph.getRuns();
//        for (XWPFRun run : runs) {
//            String oneparaString = run.getText(run.getTextPosition());
//            if (StringUtils.isEmpty(oneparaString)) {
//                continue;
//            }
//            for (Map.Entry<String, String> entry : contentMap.entrySet()) {
//                oneparaString = oneparaString.replace(entry.getKey(), StringUtils.isEmpty(entry.getValue()) ? "--" : entry.getValue());
//            }
//            run.setText(oneparaString, 0);
//        }
//    }
//
//
//    public static void main(String[] args) {
//        Snowflake snowflake = IdUtil.getSnowflake(1, 1);
//        for (int i = 0; i < 10; i++) {
//            log.info(snowflake.nextIdStr());
//        }
//    }
//
//    /**
//     * @Author: wuyongqiang
//     * @Description:验证license许可凭证
//     * @Date: 2021/12/7  16:57
//     * @return: boolean 返回验证License状态
//     **/
//    /*private static boolean getLicense() {
//        boolean result = true;
//        try {
//            // TODO: LEE:地址修改
////            String path =  System.getProperty("user.dir")+"/website/cont/license.xml";
//            String path =  "D:\\项目\\project\\vk\\gpframework-common\\src\\main\\java\\com\\gpframework\\common\\utils\\contract\\license.xml";
//            new License().setLicense(new FileInputStream(new File(path).getAbsolutePath()));
//        } catch (Exception e) {
//            result = false;
//            log.error(e.getMessage());
//        }
//        return result;
//    }*/
//    private static boolean getLicense() {
//        final License license = new License();
//        InputStream inputStream = null;
//        try {
//            String path = "D:\\项目\\project\\vk\\gpframework-common\\src\\main\\java\\com\\gpframework\\common\\utils\\contract\\license.xml";
//            InputStream fileInputStream = new FileInputStream(path);
////            inputStream = WordUtil.class.getResourceAsStream("/license.xml");
//            license.setLicense(fileInputStream);
//            return true;
//        } catch (Exception e) {
//            log.info("license激活失败" + e);
//            return false;
//        } finally {
//            if (inputStream != null) {
//                try {
//                    inputStream.close();
//                } catch (IOException e) {
//                    log.error(e.getMessage());
//                }
//            }
//        }
//    }
//
//
//    /**
//     * @Author: wuyongqiang
//     * @Description:word转pdf
//     * @Date: 2021/12/7  16:58
//     * @Param wordPath: word 全路径，包括文件全称
//     * @Param pdfPath: pdf 保存路径，包括文件全称
//     * @return: boolean 返回转换状态
//     **/
//    public static boolean wordConverterToPdf(String wordPath, String pdfPath) {
//
//        boolean bool = false;
//        // 验证License,若不验证则转化出的pdf文档会有水印产生
//        // TODO: LEE: 验证License
////        if (!getLicense()) return bool;
//        try {
//            FileOutputStream os = new FileOutputStream(new File(pdfPath));// 新建一个pdf文档输出流
//            com.aspose.words.Document doc = new com.aspose.words.Document(wordPath);// Address是将要被转化的word文档
//            doc.save(os, com.aspose.words.SaveFormat.PDF);// 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
//            os.close();
//            bool = true;
//        } catch (Exception e) {
//            log.error("word转PDF转换异常！！", e.getMessage());
//        }
//
//        return bool;
//    }
//
//    /**
//     * @param toFilePath 文件夹路径 word转pdf
//     */
//    public static String file2pdf(String toFilePath) throws Exception {
//        String type = toFilePath.substring(toFilePath.lastIndexOf(".") + 1);
//        String htmFileName;
//        //获取转换成PDF之后文件名
//        if ("doc".equals(type)) {
//            htmFileName = toFilePath.replace("doc", "pdf");
//        } else if ("docx".equals(type)) {
//            htmFileName = toFilePath.replace("docx", "pdf");
//        } else {
//            return null;
//        }
//        // 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
//        //通过转换之后的PDF文件名,创建PDF文件
//        File htmlOutputFile = new File(htmFileName);
//        //获取文件输出流
//        FileOutputStream os = new FileOutputStream(htmlOutputFile);
//        //获取Doc文档对象模型
//        com.aspose.words.Document doc = new com.aspose.words.Document(toFilePath);
//        DocumentBuilder builder = new DocumentBuilder(doc);
//        builder.setBold(false);
//        //         设置纸张大小
//        builder.getPageSetup().setPaperSize(PaperSize.A4);
//
//        //为doc文档添加水印
////       insertWatermarkText(doc, "test效果");
//        //将doc文旦转换成PDF文件并输出到之前创建好的pdf文件中
//        doc.save(os, SaveFormat.PDF);
//        //关闭输出流
//        os.close();
//        return htmFileName;
//    }
//
//
//    /**
//     * @Author: wuyongqiang
//     * @Description: 在word表格中指定位置插入一行，并将某一行的样式复制到新增行
//     * @Date: 2021/12/7  16:58
//     * @Param table: 需要插入的表格
//     * @Param copyrowIndex: 需要复制的行位置
//     * @Param newrowIndex: 需要新增一行的位置
//     * @return: void 返回类型
//     **/
//    public static void insertRow(XWPFTable table, int copyrowIndex, int newrowIndex) {
//        // 在表格中指定的位置新增一行
//        XWPFTableRow targetRow = table.insertNewTableRow(newrowIndex);
//        // 获取需要复制行对象
//        XWPFTableRow copyRow = table.getRow(copyrowIndex);
//        //复制行对象
//        targetRow.getCtRow().setTrPr(copyRow.getCtRow().getTrPr());
//        //获取需要复制的行的列
//        List<XWPFTableCell> copyCells = copyRow.getTableCells();
//        //复制列对象
//        XWPFTableCell targetCell = null;
//        for (int i = 0; i < copyCells.size(); i++) {
//            XWPFTableCell copyCell = copyCells.get(i);
//            targetCell = targetRow.addNewTableCell();
//            targetCell.getCTTc().setTcPr(copyCell.getCTTc().getTcPr());
//            if (copyCell.getParagraphs() != null && copyCell.getParagraphs().size() > 0) {
//                targetCell.getParagraphs().get(0).getCTP().setPPr(copyCell.getParagraphs().get(0).getCTP().getPPr());
//                if (copyCell.getParagraphs().get(0).getRuns() != null
//                        && copyCell.getParagraphs().get(0).getRuns().size() > 0) {
//                    XWPFRun cellR = targetCell.getParagraphs().get(0).createRun();
//                    cellR.setBold(copyCell.getParagraphs().get(0).getRuns().get(0).isBold());
//                }
//            }
//        }
//
//    }
//
//    /**
//     * 将pdf转图片
//     *
//     * @param inputStream pdf源文件流
//     * @param imgFilePath 转成一张图片文件全路径 例如 "D:\\home\\qq.png"
//     */
//    public static void pdfToImage(InputStream inputStream, String imgFilePath) {
//        try {
//            log.info("convert pdf2jpg begin");
//            long old = System.currentTimeMillis();
//            /*// 验证License
//            if (!AsposeLicenseUtil.setPdfLicense()) {
//                return;
//            }*/
//            // TODO: LEE: 验证License
////        if (!getLicense()) return;
//            Document pdfDocument = new Document(inputStream);
//            //分辨率
//            Resolution resolution = new Resolution(130);
//            JpegDevice jpegDevice = new JpegDevice(resolution);
//            List<BufferedImage> imageList = new ArrayList<BufferedImage>();
//            List<File> fileList = new ArrayList<>();
//            for (int index = 1; index <= pdfDocument.getPages().size(); index++) {
//                File file = File.createTempFile("tempFile", "png");
//                FileOutputStream fileOS = new FileOutputStream(file);
//                jpegDevice.process(pdfDocument.getPages().get_Item(index), fileOS);
//                fileOS.close();
//                imageList.add(ImageIO.read(file));
//                fileList.add(file);
//            }
//            //临时文件删除
//            BufferedImage mergeImage = mergeImage(false, imageList);
//            ImageIO.write(mergeImage, "png", new File(imgFilePath));
//            long now = System.currentTimeMillis();
//            log.info("convert pdf2jpg completed, elapsed ：" + ((now - old) / 1000.0) + "秒");
//            //删除临时文件
//            for (File f : fileList) {
//                if (f.exists()) {
//                    f.delete();
//                }
//            }
//        } catch (Exception e) {
//            log.error("convert pdf2jpg error:" + e);
//        }
//
//    }
//
//    /**
//     * 合并任数量的图片成一张图片
//     *
//     * @param isHorizontal true代表水平合并，fasle代表垂直合并
//     * @param imgs         待合并的图片数组
//     * @return
//     * @throws IOException
//     */
//    public static BufferedImage mergeImage(boolean isHorizontal, List<BufferedImage> imgs) throws IOException {
//        // 生成新图片
//        BufferedImage destImage = null;
//        // 计算新图片的长和高
//        int allw = 0, allh = 0, allwMax = 0, allhMax = 0;
//        // 获取总长、总宽、最长、最宽
//        for (int i = 0; i < imgs.size(); i++) {
//            BufferedImage img = imgs.get(i);
//            allw += img.getWidth();
//
//            if (imgs.size() != i + 1) {
//                allh += img.getHeight() + 5;
//            } else {
//                allh += img.getHeight();
//            }
//
//
//            if (img.getWidth() > allwMax) {
//                allwMax = img.getWidth();
//            }
//            if (img.getHeight() > allhMax) {
//                allhMax = img.getHeight();
//            }
//        }
//        // 创建新图片
//        if (isHorizontal) {
//            destImage = new BufferedImage(allw, allhMax, BufferedImage.TYPE_INT_RGB);
//        } else {
//            destImage = new BufferedImage(allwMax, allh, BufferedImage.TYPE_INT_RGB);
//        }
//        Graphics2D g2 = (Graphics2D) destImage.getGraphics();
//        g2.setBackground(Color.LIGHT_GRAY);
//        g2.clearRect(0, 0, allw, allh);
//        g2.setPaint(Color.RED);
//
//        // 合并所有子图片到新图片
//        int wx = 0, wy = 0;
//        for (int i = 0; i < imgs.size(); i++) {
//            BufferedImage img = imgs.get(i);
//            int w1 = img.getWidth();
//            int h1 = img.getHeight();
//            // 从图片中读取RGB
//            int[] ImageArrayOne = new int[w1 * h1];
//            // 逐行扫描图像中各个像素的RGB到数组中
//            ImageArrayOne = img.getRGB(0, 0, w1, h1, ImageArrayOne, 0, w1);
//            if (isHorizontal) {
//                // 水平方向合并
//                // 设置上半部分或左半部分的RGB
//                destImage.setRGB(wx, 0, w1, h1, ImageArrayOne, 0, w1);
//            } else {
//                // 垂直方向合并
//                // 设置上半部分或左半部分的RGB
//                destImage.setRGB(0, wy, w1, h1, ImageArrayOne, 0, w1);
//            }
//            wx += w1;
//            wy += h1 + 5;
//        }
//
//
//        return destImage;
//    }
//
//    /**
//     * pfd转图片
//     *
//     * @param pdf     源文件全路径
//     * @param outPath 转后的文件夹路径
//     */
//    public static String pdfToImage(String pdf, String outPath) {
//        log.info("------------------pdfUrl:" + pdf + "----------------------");
//        /*// 验证License
//        if (!AsposeLicenseUtil.setPdfLicense()) {
//            return;
//        }*/
//        // TODO: LEE: 验证License
////        if (!getLicense()) return;
//
//        try {
//            String datePath = DateUtils.datePath();
//            outPath += "/" + datePath;
//            long old = System.currentTimeMillis();
//            log.info("convert pdf2jpg begin");
//            Document pdfDocument = new Document(pdf);
//            //图片宽度：800
//            //图片高度：100
//            // 分辨率 960
//            //Quality [0-100] 最大100
//            //例： new JpegDevice(800, 1000, resolution, 90);
//            Resolution resolution = new Resolution(960);
//            JpegDevice jpegDevice = new JpegDevice(resolution);
//            List<String> jpgUrls = new ArrayList<>();
//            for (int index = 1; index <= pdfDocument.getPages().size(); index++) {
//                // 输出路径
//                String uuid = IdUtils.fastUuid();
//                File file = new File(outPath + "/" + uuid + ".jpg");
//                if (!file.getParentFile().exists()) {
//                    file.getParentFile().mkdirs();
//                }
//                FileOutputStream fileOs = new FileOutputStream(file);
//                jpegDevice.process(pdfDocument.getPages().get_Item(index), fileOs);
//                fileOs.close();
//                jpgUrls.add(GpframeworkConfig.getPrePath() + Constants.RESOURCE_PREFIX + "/upload/" + datePath + "/" + uuid + ".jpg");
//            }
//            String jpgUrl = jpgUrls.stream().collect(Collectors.joining(","));
//            long now = System.currentTimeMillis();
//            log.info("convert pdf2jpg completed, elapsed ：" + ((now - old) / 1000.0) + "秒");
//            return jpgUrl;
//        } catch (Exception e) {
//            log.error("convert pdf2jpg error:" + e);
//            return "";
//        }
//
//    }
//
//
//    /**
//     * pdf转jpg
//     *
//     * @throws IOException
//     */
//    public static String pdfbox(String urls, String outPath, String jpgPath) throws IOException {
//        String datePath = DateUtils.datePath();
//        outPath += "/" + datePath;
//        //pdf路径
//        URL url = new URL(urls);
//        InputStream stream = URLUtil.getStream(url);
//        // 加载解析PDF文件
//        PDDocument doc = PDDocument.load(stream);
//        org.apache.pdfbox.rendering.PDFRenderer pdfRenderer = new org.apache.pdfbox.rendering.PDFRenderer(doc);
//        PDPageTree pages = doc.getPages();
//        int pageCount = pages.getCount();
//        List<String> jpgUrls = new ArrayList<>();
//        for (int i = 0; i < pageCount; i++) {
//            BufferedImage bim = pdfRenderer.renderImageWithDPI(i, 200);
//            ByteArrayOutputStream os = new ByteArrayOutputStream();
//            ImageIO.write(bim, "jpg", os);
//            byte[] datas = os.toByteArray();
//            InputStream is = new ByteArrayInputStream(datas);
//            //jpg文件转出路径
//            //获取转换成JPG之后文件名
////            String htmFileName = urls.replace("pdf", "jpg");
//            String uuid = IdUtils.fastUuid();
//            String htmFileName = outPath + "/" + uuid + ".jpg";
//            // 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
//            //通过转换之后的PDF文件名,创建PDF文件
//            File htmlOutputFile = new File(htmFileName);
//            //获取文件输出流
//            FileOutputStream fileOutStream = new FileOutputStream(htmlOutputFile);
//            //写入数据
//            fileOutStream.write(datas);
////            jpgUrls.add(outPath + "/" + datePath + "/" + uuid + ".jpg");
//            jpgUrls.add(jpgPath + "/" + datePath + "/" + uuid + ".jpg");
////            return urls.substring(urls.lastIndexOf("/") + 1);
//        }
//        String jpgUrl = jpgUrls.stream().collect(Collectors.joining(","));
//        return jpgUrl;
//    }
//
//}
